#ifndef __UART_DECODE_H_
#define __UART_DECODE_H_

#include "uart_decode_cfg.h"

// 串口解码设备数量
#define UART_DEV_NUM                    1
// 串口包长度
#define UART_SIZE                       7
// 串口数据起始位
#define UART_START_FILED                0X55
// 串口数据结束位
#define UART_END_FILED                  0XFB
// 是否是能累加和校验
#define UART_CS_EN


typedef struct {
    union {
        uart_u8_t buf[UART_SIZE];       /*<串口解码缓存>*/
        struct __filed{
            uart_u8_t start;            /*<起始位>*/
            uart_u8_t dev_id;           /*<设备号>*/
            uart_u8_t cmd_type;         /*<命令类型>*/
            uart_u16_t cmd;             /*<控制命令>*/
            uart_u8_t cs;               /*<累加和校验位>*/
            uart_u8_t stop;             /*<停止位>*/
        } filed;
    } rev;
    uart_u8_t len;                      /*<数据长度>*/
} uart_para_t;

extern uart_para_t uart_para[UART_DEV_NUM];
// ==================================================================
/// @brief  : 串口解码初始化
///
/// @returns: void
// ==================================================================
void Uart_Decode_Init(void);

// ==================================================================
/// @brief  : 累加和计算
///
/// @param  : buf 数据缓存
/// @param  : len 数据缓存长度
///
/// @returns: 返回计算的累加和
// ==================================================================
uart_u8_t Calc_CheckSum(uart_u8_t *buf, uart_u8_t len);

// ==================================================================
/// @brief  : 串口解码数据接收处理
///
/// @param  : dev 串口解码器设备号
/// @param  : rev_data 当前串口接收到的数据
///
/// @returns: 1->成功接收一包数据
// ==================================================================
uart_u8_t Uart_Decode_Rev(uart_u8_t dev, uart_u8_t rev_data);

#endif

